{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "看一下数据大小，训练集55000条，校验集5000条，测试集10000条"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-b0ffac263758>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "打印16张训练集的图片，显示图片带有的标签，，每张图片是28x28长度的一个一维向量（28*28=784），图片大小为28*28"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里我们直接使用上面的数据作为输入，所以定义两个placeholder分别用于图像和lable数据，另外，定义一个float类型的变量用于设置学习率。\n",
    "\n",
    "为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])#定义输入，输入数据是图片的784列一维数据，定义一个占位符，后面把数据输入进来\n",
    "y = tf.placeholder(\"int64\", [None])#输出数据自然是整数型的标签\n",
    "learning_rate = tf.placeholder(\"float\")#定义学习率\n",
    "def initialize(shape, stddev=0.1):#定义初始化函数。\n",
    "  return tf.truncated_normal(shape, stddev=0.1)#用truncated_normal函数进行初始化，truncated_normal是截断正态分布，会删除大于2个stddev的x值\n",
    "L1_units_count = 100 #第一层神经元的个数\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count])) #variable主要用于数据存储,在计算图的运算过程中，其值会一直保存到程序运行结束\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))#比如神经网络中的权重和bias等，在训练过后，总是希望这些参数能够保存下来，而不是直接就消失了，所以这个时候要用到Variable\n",
    "logits_1 = tf.matmul(x, W_1) + b_1 #logits函数，即y=wx+b在tensorflow中计算图的定义方法\n",
    "output_1 = tf.nn.relu(logits_1) #激活函数为relu"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "L2_units_count = 10 #最终输出的结果总过有10个\n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来定义损失函数和优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))#损失函数是交叉熵损失\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer( #定义优化方法为梯度下降\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "需要注意的是，上面的网络，最后输出的是未经softmax的原始logits，而不是概率分布， 要想看到概率分布，还需要做一下softmax。\n",
    "\n",
    "将输出的结果与正确结果进行对比，即可得到我们的网络输出结果的准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)# 原始logit用softmax转换一下\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)# 预测的准确率\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))#取平均值得到最终的准确率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "saver用于保存或恢复训练的模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32 #一轮喂入的数据为32个\n",
    "trainig_step = 1000 #一轮训练训练1000个step\n",
    "\n",
    "saver = tf.train.Saver()#模型保存"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "所有的基本定义到这里就完成了，接下来就可以正式开始定义计算图了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.351709, the validation accuracy is 0.882\n",
      "after 200 training steps, the loss is 0.0963676, the validation accuracy is 0.9088\n",
      "after 300 training steps, the loss is 0.284616, the validation accuracy is 0.9212\n",
      "after 400 training steps, the loss is 0.128543, the validation accuracy is 0.9304\n",
      "after 500 training steps, the loss is 0.285667, the validation accuracy is 0.9254\n",
      "after 600 training steps, the loss is 0.111476, the validation accuracy is 0.937\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:966: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.0604077, the validation accuracy is 0.9458\n",
      "after 800 training steps, the loss is 0.262678, the validation accuracy is 0.9498\n",
      "after 900 training steps, the loss is 0.273349, the validation accuracy is 0.947\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9456\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "        #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面用训练好的模型做一个测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "结果比较差。推测原因：可能是由于神经层数比较少，学习轮数比较少。增加神经网络的深度，增加训练轮数比较好。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
